package com.demo.java.OD251_300.OD288;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【士兵过河 Ⅱ】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146080739
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt(); // 土工兵数量
        int T = sc.nextInt(); // 最大过河时间
        int[] a = new int[N]; // 记录每个土工兵的过河时间
        for (int i = 0; i < N; i++) {
            a[i] = sc.nextInt(); // 输入每个土工兵的过河时间
        }
        Arrays.sort(a); // 排序土工兵的过河时间

        int[] dp = new int[N]; // dp 数组存储每个土工兵的最短过河时间

        dp[0] = a[0]; // 第一个土工兵的过河时间就是他的过河时间
        dp[1] = get_(a[0], a[1]); // 第二个土工兵的过河时间是两个土工兵之间的最短过河时间
        boolean time_flag = true; // 标记是否超时

        if (dp[0] > T) {
            System.out.println("0 0"); // 如果第一个土工兵的过河时间就超时，则返回 0
        } else if (dp[1] > T) {
            System.out.println("1 " + dp[0]); // 如果第一个和第二个土工兵的过河时间都不超时，则返回 1
        } else {
            // 从第三个土工兵开始，逐步计算最短过河时间
            for (int i = 2; i < N; i++) {
                dp[i] = Math.min(dp[i - 1] + a[0] + get_(a[0], a[i]),
                        dp[i - 2] + a[0] + get_(a[i - 1], a[i]) + a[1] + get_(a[0], a[1]));

                // 如果当前的过河时间超过了最大时间 T，则输出当前能够过河的土工兵数量及最短过河时间
                if (dp[i] > T) {
                    System.out.println(i + " " + dp[i - 1]);
                    time_flag = false;
                    break;
                }
            }
        }

        // 如果没有超时，则输出最大土工兵数量及最短过河时间
        if (time_flag) {
            System.out.println(N + " " + dp[N - 1]);
        }
    }

    // 计算两个土工兵的最短过河时间
    public static int get_(int a, int b) {
        if (a * 10 < b) {
            return a * 10; // 如果第一个土工兵的过河时间乘以 10 小于第二个土工兵的过河时间，则返回第一个土工兵的过河时间
        }
        return b; // 否则返回第二个土工兵的过河时间
    }
}